package br.fic.poo.agenda.classes;

import br.fic.poo.agenda.persistencia.IOArquivo;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.io.*;

public class Agenda implements Serializable
{
    private static Agenda agenda;
    
    private String proprietario;
    private String email;
    private String telefone;
    private GregorianCalendar dataCriacao;
    private ArrayList<Contato> listaContatos;
    private ArrayList<Compromisso> listaCompromissos;
    
    // Padrão de Projeto Singleton
    public static Agenda getAgenda()
    {
        if (agenda == null)
            agenda = new Agenda();
        return agenda;
    }
    
    private Agenda() 
    {
        this("","","");
    }
    
    private Agenda(String proprietario, String email, String telefone) 
    {
    	this.proprietario = proprietario;
    	this.email = email;
    	this.telefone = telefone;
    	this.dataCriacao = new GregorianCalendar();
        this.listaContatos = new ArrayList();
        this.listaCompromissos = new ArrayList();    
    }
    
    public String getProprietario() 
    {
    	return proprietario;
    }

    public void setProprietario(String proprietario) 
    {
    	this.proprietario = proprietario;
    }
    
    public String getEmail() 
    {
	return email;
    }

    public void setEmail(String email) 
    {
    	this.email = email;
    }

    public String getTelefone() 
    {
    	return telefone;
    }

    public void setTelefone(String telefone) 
    {
    	this.telefone = telefone;
    }

    // somente leitura
    public GregorianCalendar getDataCriacao() 
    {
    	return dataCriacao;
    }

    public void setDataCriacao(GregorianCalendar dataCriacao) 
    {
    	this.dataCriacao = dataCriacao;
    }

    // somente leitura
    public ArrayList<Contato> getListaContatos() 
    {
    	return listaContatos;
    }

    // somente leitura
    public ArrayList<Compromisso> getListaCompromissos() 
    {
    	return listaCompromissos;
    }

    public void lerAgenda()
    {
       Agenda aux = (Agenda) IOArquivo.lerObjeto("agenda.dat");
       
       setProprietario(aux.getProprietario());
       setEmail(aux.getEmail());
       setTelefone(aux.getTelefone());
       setDataCriacao(aux.getDataCriacao());
       
       getListaContatos().clear();
       getListaContatos().addAll(aux.getListaContatos());
       
       getListaCompromissos().clear();
       getListaCompromissos().addAll(aux.getListaCompromissos());

    }
    
    public void gravarAgenda()
    {
        IOArquivo.gravarObjeto("agenda.dat",agenda);
    }

}
